<?php

require_once ('DataBase.php');

//Utiliza el patron Singleton
class MateriasBDFacade {

    private static $instance;

    private function __construct() {
        
    }

    public static function getInstance() { //metodo Singleton
        if (!isset(self::$instance)) {
            $c = __CLASS__;
            self::$instance = new $c;
        }
        return self::$instance;
    }

    public function existePerfil($user) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM pinf.perfil WHERE usrname = '$user'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: PerfilBDFacade.existePerfil(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existePeriodo($mesIni, $mesFin, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Periodo WHERE mesIni = '$mesIni'" .
                "AND mesFin = '$mesFin' AND anio = $anio";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existePeriodo(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existeMateria($codigo) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Materia WHERE codigo = '$codigo'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeMateria(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function obtenerMateriasPensum() {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Materia";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMateriasPensum: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    public function obtenerPeriodosValidos($user, $materia) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT p.mesIni, p.mesFin, p.anio
            FROM Periodo p LEFT JOIN Curso c
            ON p.mesIni = c.mesIni
            AND p.mesFin = c.mesFin
            AND p.anio = c.anio
            AND c.estudiante = '$user'
            AND c.materia = '$materia'
            WHERE c.estudiante IS NULL";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerPeriodosValidos: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    public function existeDepartamento($codigo) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Departamento WHERE codigo = '$codigo'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeDepartamento(): " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function existeCurso($estudiante, $materia, $mesIni, $mesFin, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT * FROM Pinf.Curso " .
                "WHERE estudiante = '$estudiante' AND materia = '$materia' AND " .
                "mesIni = '$mesIni' AND mesFin = '$mesFin' " .
                "AND anio = $anio";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.existeCurso: " . mysql_error());
        }
        $row = mysql_fetch_row($queryResult);
        if (!($row)) {
            return FALSE;
        } else {
            return $row;
        }
    }

    public function obtenerMaterias($username) {
        DataBase::getInstance(); //Conexion a BD establecida.
        //$sqlQuery = "SELECT user, nombre, apellido, codigo, nombre, numCreditos, nombre AS nombreDept, direccion, NombreProfesor, ApellidoProfesor, calificacion FROM Perfil AS p, Materia AS m, CursaProfesorSinPerfil AS c, Departamento AS d, Periodo AS pe WHERE c.Perfil_user = '$username' AND c.Perfil_user = p.user AND c.Materia_codigo = m.Codigo AND m.departamento = d.codigo AND c.Periodo_mesInicial = pe.mesInicial AND c.Periodo_mesFinal = pe.mesFinal AND c.Periodo_ano = pe.ano";
        $sqlQuery = "SELECT * FROM Pinf.Curso WHERE estudiante = '$username' ORDER BY Anio, mesIni, materia";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMaterias: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

    public function registrarCurso($user, $materia, $mesIni, $mesFin, $anio, $calificacion, $profPerfil, $nombreP, $apellidoP) {
        DataBase::getInstance();
        if (is_null($profPerfil)) {
            $profPerfil = "NULL, ";
        } else {
            $profPerfil = "'$profPerfil', ";
        }
        if (is_null($nombreP)) {
            $nombreP = "NULL, ";
        } else {
            $nombreP = "'$nombreP', ";
        }
        if (is_null($apellidoP)) {
            $apellidoP = "NULL";
        } else {
            $apellidoP = "'$apellidoP'";
        }
        if (is_null($calificacion)) {
            $calificacion = "NULL";
        }

        $sqlQuery = "INSERT INTO pinf.curso
                    (estudiante,
                    materia,
                    mesIni,
                    mesFin,
                    anio,
                    calificacion,
                    profesorId,
                    nombreProfesor,
                    apellidoProfesor)
                    VALUES
                    (
                    '$user',
                    '$materia',
                    '$mesIni',
                    '$mesFin',
                    '$anio',
                    $calificacion, " .
                $profPerfil .
                $nombreP .
                $apellidoP . ")";
        //Retorna TRUE o FALSE dependiendo del resultado de la operacion.        
        return mysql_query($sqlQuery);
    }

    public function obtenerUsuario($nombreProfesor, $apellidoProfesor) {
        DataBase::getInstance();
        $sqlQuery = "SELECT usrname FROM Perfil WHERE nombre = '$nombreProfesor' 
                        AND apellido = '$apellidoProfesor'";
        $queryResult = mysql_query($sqlQuery);

        if (!($userProfesor = @mysql_fetch_assoc($queryResult))) {
            return FALSE;
        }
        $usuario = $userProfesor["usrname"];
        return $usuario;
    }

    // VER Script para verificar nombre de las columnas
    public function actualizarMateriasProfesorSinPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $nombreProfesor, $apellidoProfesor, $calificacion) {
        DataBase::getInstance(); //Conexion a BD establecida.
// Verificar como hacer con nombre apellido
        $sqlQuery = "UPDATE Curso SET nombreProfesor = '$nombreProfesor', apellidoProfesor = '$apellidoProfesor',
                calificacion = '$calificacion', profesorID = NULL WHERE estudiante = '$user' AND 
                materia = '$codigo' AND mesIni = '$mesInicial' 
                AND mesFin= '$mesFinal' AND anio= '$anio'";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.actualizarMaterias(...): " . mysql_error());
        }
        return TRUE;
    }

    // VER Script para verificar nombre de las columnas
    public function actualizarMateriasProfesorConPerfil($user, $codigo, $mesInicial, $mesFinal, $anio, $userProfesor, $calificacion) {
        $sqlQuery = "UPDATE Curso SET profesorID = '$userProfesor', 
                    calificacion ='$calificacion', nombreProfesor = NULL, apellidoProfesor = NULL
                    WHERE estudiante = '$user' AND 
                    materia = '$codigo' AND mesIni= '$mesInicial' AND 
                    mesFin= '$mesFinal' AND anio= '$anio'";


        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.actualizarMaterias(...): " . mysql_error());
        }
        return TRUE;
    }

    public function eliminarMateria($user, $codigo, $mesInicial, $mesFinal, $anio) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "DELETE FROM curso WHERE estudiante = '$user' AND 
                materia = '$codigo' AND mesIni = '$mesInicial' 
                AND mesFin = '$mesFinal' AND anio= '$anio'";
        return mysql_query($sqlQuery);
    }

    public function obtenerAniosValidos() {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT DISTINCT anio from pinf.periodo";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMaterias: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row[0];
        }
        return $array;
    }

    public function buscarProfesor($nombre, $apellido) {
        DataBase::getInstance(); //Conexion a BD establecida.
        $sqlQuery = "SELECT nombre, apellido, usrname FROM pinf.perfil WHERE tipo='profesor' AND (nombre='$nombre' OR apellido='$apellido')";
        $queryResult = mysql_query($sqlQuery);
        if (!$queryResult) {
            die("ERROR: MateriasBDFacade.obtenerMaterias: " . mysql_error());
        }
        $array = array();
        while ($row = mysql_fetch_row($queryResult)) {
            $array[] = $row;
        }
        return $array;
    }

}

?>
